#pragma once
#include "context.hh"
#include <glm/vec3.hpp>

namespace gl
{
	struct camera
	{
		void forward(float offset) { dz += offset; }
		void raise(float offset) { dy -= offset; }
		void slip(float offset) { dx -= offset; }
		void roll(float angle) { dza = angle; }
		void yaw(float angle) { dxa = -angle; }
		void fov(float f) { df = f; }

		void update(float step);
		void apply(context& ctx) const;
		void operator()(context& ctx) const { apply(ctx); }

		glm::vec3 target() const { return { -cx, -cy, -cz }; }

	private:
		// x, z: object's position; a: roll angle; f: fov
		// c for current
		float cx=0;
		float cy=0;
		float cz=0;
		float cza=0;
		float cxa=0;
		float cf=100;
		// d for destination
		float dx=0;
		float dy=0;
		float dz=0;
		float dza=0;
		float dxa=0;
		float df=60;
	};
}

